Tras el brote de la COVID-19, cada vez más personas trabajan, estudian y socializan desde sus casas. A lo largo de la cadena de valor de Internet, los operadores de comunicaciones, los proveedores de contenido y servicios en la nube, así como también los puntos de intercambio de Internet (IXP), han experimentado hasta un 60% más de tráfico de Internet en comparación con el tráfico previo al brote. En esta situación sin precedentes, la resiliencia y la capacidad de las redes de banda ancha se han vuelto aún más esenciales. consulte mas aqui
La base de datos proporcionada, nos brinda la cantidad de datos (en GB) que circulan a traves de distintos proveedores de servicios digitales por medio de su infraestructura de red. Este dataset contempla distintos provedores que pueden presentar correlacion entre ellos, por lo cual podrian ser omitidos para evitar estudiar informacion muy parecida en las series.
#Lectura de los datos del archivo csv.
datos_internet <- read.csv("Monitoreo de Tráfico de Internet_2.csv", header = TRUE,
sep = ",", check.names = FALSE)
datos_internet <- datos_internet %>% select(Fecha, Proveedor, Trafico_Datos_Local)
datos_internet <- mutate(datos_internet, Fecha = as.Date(Fecha, "%m/%d/%Y"),
Trafico_Datos_Local = as.numeric(Trafico_Datos_Local))De todos los proveedores, seleccionaremos a los 3 que mas datos generan de manera local asi como 1 de los que menos generan.
#Grafica de area.
ggplot(datos_internet, aes(x = Fecha, y = Trafico_Datos_Local)) +
geom_area(aes(color = Proveedor, fill = Proveedor),
alpha = 0.5, position=position_dodge(0.8)) +
ggtitle("Trafico de datos durante la pandemia") +
xlab("Mes 2020") +
ylab("Datos en GB") +
theme_minimal() +
scale_color_manual(values=c("#00AFBB", "#E7B800", "#CC0000", "#006600",
"#669999", "#00CCCC", "#660099", "#FC0066",
"#AF9999", "#FE99FF", "#559955", "#A990CC",
"#660099", "#CC0066")) +
scale_fill_manual(values=c( "#00AFBB", "#E7B800", "#CC0000", "#006600",
"#669999", "#00CCCC", "#660099", "#FC0066",
"#AF9999", "#FE99FF", "#559955", "#A990CC",
"#660099", "#CC0066"))En este caso fueron seleccionados: Movistar, Unefon, Clarovideo y DirecTV.
Vayamos a realizar un analisis ganeral de las series de tiempo que nos proporcionan los proveeedores de servicios. Tras observar cada una de las series, se puede llegar a un punto en comun, todas tienen puntos de inflexion cerca de los meses de Julio, Agosto y Enero, ya que estos son los meses de transicion de vacaciones a clases/trabajo o viceversa por parte de estudiantes o trabajadores; Por motivos de la pandemia, el regreso a labores se debe de realizar de manera puramente virtual y en algunos escasos casos de manera semipresencial. ¿A que va esto?, pues a que todo mundo ahorita depende de servicios de internet o de entretenimiento ya que por decreto oficial, nadie deberia de salir de su casa.
NOTA. Los datos atipicos de las graficas fueron “Normalizados”, sustituyendo el dato por el promedio del dato de un dia anterior con el de un dia posterior, esto con el fin de brindar un buen modelo de prediccion.
grafica_movi <- ggplot(movistar) +
geom_line(aes(x=Fecha, y= Trafico_Datos_Local), color="green", size=0.8) +
geom_point(aes(x=Fecha, y= Trafico_Datos_Local), size=1) +
ggtitle("Movistar") +
labs(x="Tiempo", y="Datos (GB)") +
theme_bw() +
theme(plot.title = element_text(hjust = 0.5))
ggplotly(grafica_movi)Antes que nada, se debe aclarar que la compañia “Movistar” es una empresa de servicios telefonia movil, cuyo proposito es comunicar a los cientos de miles de mexicanos con el mundo exterior y de manera local. En esta grafica se puede observar el alce de la demanda de servicios telefonicos justo cuando empezo el periodo vacacional y una caida una vez se regreso a dias laborales.
grafica_une <- ggplot(une) +
geom_line(aes(x=Fecha, y= Trafico_Datos_Local), color="yellow", size=0.8) +
geom_point(aes(x=Fecha, y= Trafico_Datos_Local), size=1) +
ggtitle("Unefon") +
labs(x="Tiempo", y="Datos (GB)") +
theme_bw() +
theme(plot.title = element_text(hjust = 0.5))
ggplotly(grafica_une)Como dato previo al analisis, se debe aclarar que la compañia “Unefon” es una empresa de servicios telefonia movil, cuyo proposito es comunicar a los cientos de miles de mexicanos con el mundo exterior y de manera local. En esta grafica se puede observar la misma demanda que tuvo movistar, pero con una mayor cantidad de usuarios asociados a esta telefonia al principio, tambien demuestra el alce de la demanda de servicios telefonicos justo cuando empezo el periodo vacacional y una caida una vez se regreso a dias laborales.
grafica_claro <- ggplot(claro) +
geom_line(aes(x=Fecha, y= Trafico_Datos_Local), color="red", size=0.8) +
geom_point(aes(x=Fecha, y= Trafico_Datos_Local), size=1) +
ggtitle("Claro") +
labs(x="Tiempo", y="Datos (GB)") +
theme_bw() +
theme(plot.title = element_text(hjust = 0.5))
ggplotly(grafica_claro)Como dato previo, se debe aclarar que la compañia “Claro” es una empresa de servicios internet y telefonia fija, asi como servicios de entretenimiento en linea, cuyo proposito es de brindar un servicio total a sus clientes. En esta grafica se puede observar un cambio significativo con respecto a las empresas anteriores, como esta es una empresa mas orientado a lo “fijo” y al entretenimiento, por motivos de confinamiento agarro mas fuerza y tuvo un incremento desde el inicio de la pandemia; como las personas se la pasan en su hogar, necesitan una forma de pasar el tiempo y que mejor con los servicios de entretenimiento qye ofrece esta empresa y ademas, si estas en casa, no hay necesidad de tener un plan movil de internet si ya tienes internet fijo.
grafica_directv <- ggplot(directv) +
geom_line(aes(x=Fecha, y= Trafico_Datos_Local), color="blue", size=0.8) +
geom_point(aes(x=Fecha, y= Trafico_Datos_Local), size=1) +
ggtitle("Directv") +
labs(x="Tiempo", y="Datos (GB)") +
theme_bw() +
theme(plot.title = element_text(hjust = 0.5))
ggplotly(grafica_directv)Como dato previo, se debe aclarar que la compañia “Directv” es una empresa de servicios de television por cable, cuyo proposito es de brindar canales exclusivos que no se pueden obtener a traves de television abierta a sus clientes. En esta grafica se puede observar un cambio significativo con respecto a las empresas anteriores, y un comportamiento casi contrario con respecto a Claro, ya que esta tambien provee servicio de entretenimiento, pero ¿Porque?. Muy facil!, el internet agarro gran fuerza, reemplazando asi la television abierta y por cable desde el momento en que salio y empresas exclusivas de entretenimiento que solo pueden ser visitados a traves de internet y de popularidad masiva, aprovecharon la pandemia para lanzar una gran cantidad de espectaculos, logrando asi que muchas personas que tenian television por cable, cancelaran el servicio porque en internet podian encontrar mas variedad y hasta los mismos programas por un precio mas barato o inclusive gratis!
Como breve conclusion de las graficas anteriores, Ante el confinamiento, los servicios de telefonía e internet fijos así como la TV de paga fueron los servicios que tomaron mayor fuerza al elevar sus ingresos y captar más clientes.
Es importante recordar que, al ajustar un modelo, los residuales de este deben comportarse como ruido blanco.
Para la empresa Movistar, se realizo una serie de tiempo, asi como uso de la la función auto.arima para ajustar el mejor modelo posible a los datos. Para comprobar que es un buen modelo, se hizo el test Ljung-Box.
ts_movistar = ts(movistar$Trafico_Datos_Local, start = c(2020,3,30),
end = c(2021,1,26), frequency = 305)
modelo_arima_movistar <- auto.arima(ts_movistar)
summary(modelo_arima_movistar) Series: ts_movistar
ARIMA(2,1,2)
Coefficients:
ar1 ar2 ma1 ma2
1.2261 -0.9438 -1.3585 0.8792
s.e. 0.0318 0.0376 0.0285 0.0521
sigma^2 estimated as 495865982: log likelihood=-3462.44
AIC=6934.88 AICc=6935.09 BIC=6953.45
Training set error measures:
ME RMSE MAE MPE MAPE MASE ACF1
Training set 218.0964 22084.16 17076.06 -0.07347595 3.377077 NaN -0.2521025
Test Ljung-Box:
Box-Ljung test
data: residuals(modelo_arima_movistar)
X-squared = 19.512, df = 1, p-value = 9.996e-06
Media de los residuales del modelo:
[1] 218.0964
Se puede observar que el ajuste arrojo un modelo ARIMA (2,1,2), con 2 componentes autorregresivos, 2 medias móviles y una diferencia, Sin embargo notamos que la prueba Ljung-Box obtuvo un p_value = 9.996e-06, lo cual nos indica por contraste de hipotesis que los residuales no se comportan como ruido blanco; por lo que el modelo no puede ser usado para predecir. Ademas de esto, la media de los residuales es de 218.09, mientras que idealmente este valor debe de aproximarse a cero.
Para obtener un modelo que nos sirva para predicciones y para corregir la media de los residuales, usaremos medias móviles de orden 2 para suavizar la serie; ya evaluada la serie de tiempo, se logro obtener los siguientes resultados:
ts_movistar = ts(movistar$Trafico_Datos_Local, start = c(2020,3,30),
end = c(2021,1,26), frequency = 305)
#Suavizamos el modelo para obtener una mejor prediccion.
ma_ts_movistar <- ma(ts_movistar,2)
modelo_arima_movistar <- auto.arima(ma_ts_movistar)
summary(modelo_arima_movistar) Series: ma_ts_movistar
ARIMA(2,1,0) with drift
Coefficients:
ar1 ar2 drift
0.8830 -0.7363 327.0304
s.e. 0.0397 0.0396 592.8968
sigma^2 estimated as 77445501: log likelihood=-3160.37
AIC=6328.74 AICc=6328.87 BIC=6343.56
Training set error measures:
ME RMSE MAE MPE MAPE MASE ACF1
Training set 12.95543 8741.838 7193.542 0.0220436 1.433119 NaN 0.02727393
Test Ljung-Box para el modelo suavizado:
Box-Ljung test
data: residuals(modelo_arima_movistar)
X-squared = 0.22689, df = 1, p-value = 0.6338
Media de los residuales del modelo suavizado:
[1] 12.95543
Tras realizar estas modificaciones, el nuevo ajuste nos arrojo un modelo ARIMA(2,1,0) con 2 componentes autorregresivos, 0 medias móviles y una diferencia. Ahora tras realizar la prueba Ljung-Box se obtuvo un p_value = 0.6338, lo cual nos indica que los residuales se comportan como ruido blanco y es un modelo que se puede usar para realizar pronosticos. Ademas de esto, la media de los residuales se redujo considerablemente a un valor de 12.95.
Tras haber ajustado el modelo, se pudo obtener el siguiente pronostico:
#Ver si es un buen modelo.
prediccion_movistar <- forecast(modelo_arima_movistar,10,level=95)
plot(prediccion_movistar, main="Pronostico para Movistar.")Para la empresa “Claro”, al igual que la empresa anterior, se realizo una serie de tiempo, asi como uso de la función auto.arima para ajustar el mejor modelo posible a los datos. Para comprobar que es un buen modelo, se hizo el test de Ljung-Box.
ts_claro = ts(claro$Trafico_Datos_Local, start = c(2020,3,30),
end = c(2021,1,26), frequency=305)
modelo_arima_claro <- Arima(ts_claro, order = c(3,2,2))
summary(modelo_arima_claro) Series: ts_claro
ARIMA(3,2,2)
Coefficients:
ar1 ar2 ar3 ma1 ma2
0.4597 -0.2298 -0.3165 -1.8154 0.8304
s.e. 0.0623 0.0602 0.0597 0.0371 0.0367
sigma^2 estimated as 4.065e+09: log likelihood=-3770.64
AIC=7553.28 AICc=7553.57 BIC=7575.54
Training set error measures:
ME RMSE MAE MPE MAPE MASE ACF1
Training set -32.53311 63016.1 50555.39 -0.2353234 4.757215 NaN -0.08174628
Box-Ljung test
data: residuals(modelo_arima_claro)
X-squared = 2.0516, df = 1, p-value = 0.152
#Ver si es un buen modelo.
prediccion_claro <- forecast(modelo_arima_claro,10,level=95)
plot(prediccion_claro, main="Pronostico para Claro") ts_unefon = ts(une$Trafico_Datos_Local,start = c(2020,3,30),
end = c(2021,1,26), frequency=305)
modelo_arima_unefon <- auto.arima(ts_unefon)
summary(modelo_arima_unefon) Series: ts_unefon
ARIMA(4,1,2)
Coefficients:
ar1 ar2 ar3 ar4 ma1 ma2
0.6498 -0.5720 -0.1813 -0.3071 -1.1905 0.7929
s.e. 0.0707 0.0722 0.0674 0.0618 0.0471 0.0644
sigma^2 estimated as 1.324e+09: log likelihood=-3610.48
AIC=7234.95 AICc=7235.33 BIC=7260.95
Training set error measures:
ME RMSE MAE MPE MAPE MASE ACF1
Training set 106.0698 35969.85 28333.74 -0.1381419 3.491657 NaN -0.0307313
Box-Ljung test
data: residuals(modelo_arima_unefon)
X-squared = 0.28994, df = 1, p-value = 0.5903
#Ver si es un buen modelo.
prediccion_unefon <- forecast(modelo_arima_unefon, 12, level=95)
plot(prediccion_unefon, main="Pronostico para Unefon") ts_directv = ts(directv$Trafico_Datos_Local, start = c(2020,3,30),
end = c(2021,1,26), frequency=305)
modelo_arima_directv <- auto.arima(ts_directv, seasonal=TRUE)
summary(modelo_arima_directv) Series: ts_directv
ARIMA(2,1,2) with drift
Coefficients:
ar1 ar2 ma1 ma2 drift
1.1069 -0.663 -1.3949 0.5808 -8.5755
s.e. 0.0692 0.064 0.0727 0.0709 35.1089
sigma^2 estimated as 3362602: log likelihood=-2704.81
AIC=5421.62 AICc=5421.9 BIC=5443.9
Training set error measures:
ME RMSE MAE MPE MAPE MASE ACF1
Training set 11.12746 1815.554 1440.87 -0.0728653 2.683842 NaN -0.07059401
Box-Ljung test
data: residuals(modelo_arima_directv)
X-squared = 1.53, df = 1, p-value = 0.2161
#Ver si es un buen modelo.
prediccion_directv <- forecast(modelo_arima_directv, 12, level=95)
plot(prediccion_directv, main="Pronostico para Directv")